package model

import (
	"time"

	"gorm.io/gorm"
)

// NotificationType 通知类型
const (
	NotificationTypeSystem    = 1 // 系统通知
	NotificationTypeInventory = 2 // 库存通知
	NotificationTypeTask      = 3 // 任务通知
	NotificationTypeApproval  = 4 // 审批通知
)

// NotificationStatus 通知状态
const (
	NotificationStatusUnread = 1 // 未读
	NotificationStatusRead   = 2 // 已读
)

// NotificationLevel 通知级别
const (
	NotificationLevelInfo    = 1 // 普通
	NotificationLevelWarning = 2 // 警告
	NotificationLevelError   = 3 // 错误
)

// Notification 通知模型
type Notification struct {
	ID        uint           `json:"id" gorm:"primarykey"`
	Type      int            `json:"type" gorm:"not null;comment:通知类型"`      // 通知类型
	Level     int            `json:"level" gorm:"not null;comment:通知级别"`     // 通知级别
	Title     string         `json:"title" gorm:"size:255;not null"`         // 通知标题
	Content   string         `json:"content" gorm:"type:text;not null"`      // 通知内容
	Status    int            `json:"status" gorm:"not null;default:1"`       // 通知状态
	UserID    uint           `json:"user_id" gorm:"not null;comment:接收用户ID"` // 接收用户ID
	CreatedAt time.Time      `json:"created_at"`
	UpdatedAt time.Time      `json:"updated_at"`
	DeletedAt gorm.DeletedAt `json:"-" gorm:"index"`

	User *User `json:"user" gorm:"foreignKey:UserID"` // 接收用户
}

// TableName 表名
func (Notification) TableName() string {
	return "notifications"
}

// NotificationTemplate 通知模板
type NotificationTemplate struct {
	ID        uint           `json:"id" gorm:"primarykey"`
	Code      string         `json:"code" gorm:"size:50;not null;uniqueIndex"` // 模板代码
	Name      string         `json:"name" gorm:"size:100;not null"`            // 模板名称
	Title     string         `json:"title" gorm:"size:255;not null"`           // 模板标题
	Content   string         `json:"content" gorm:"type:text;not null"`        // 模板内容
	Type      int            `json:"type" gorm:"not null"`                     // 通知类型
	Level     int            `json:"level" gorm:"not null"`                    // 通知级别
	Status    int            `json:"status" gorm:"not null;default:1"`         // 状态
	CreatedAt time.Time      `json:"created_at"`
	UpdatedAt time.Time      `json:"updated_at"`
	DeletedAt gorm.DeletedAt `json:"-" gorm:"index"`
}

// TableName 表名
func (NotificationTemplate) TableName() string {
	return "notification_templates"
}
